Skip to content
c++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

constexpr int N = 3005;
constexpr int M = 20005;

std::vector<int> g[N];
int dfn[N], low[N], timer;
int scc[N], scc_cnt;
std::vector<int> stk;
bool in_stk[N];

int c[N], scc_c[N];
int in[N];

int n;

void tarjan(int u) {
    dfn[u] = low[u] = ++timer;
    stk.push_back(u);
    in_stk[u] = true;

    for (int v : g[u]) {
        if (!dfn[v]) {
            tarjan(v);
            low[u] = std::min(low[u], low[v]);
        } else if (in_stk[v]) {
            low[u] = std::min(low[u], dfn[v]);
        }
    }

    if (dfn[u] == low[u]) {
        ++scc_cnt;
        int v;
        do {
            v = stk.back();
            stk.pop_back();
            in_stk[v] = false;
            scc[v] = scc_cnt;
            scc_c[scc_cnt] = std::min(scc_c[scc_cnt], c[v]);
        } while (v != u);
    }
}
void fc() {
    std::cin >> n;
    int p;
    std::cin >> p;
    for (int i = 1; i <= n; i++) {
        scc_c[i] = c[i] = M;
    }

    for (int i = 0; i < p; i++) {
        int x, q;
        std::cin >> x >> q;
        c[x] = q;
    }

    int r;
    std::cin >> r;
    std::vector<std::pair<int, int>> e(r);
    for (auto& [x, y] : e) {
        std::cin >> x >> y;
        g[x].push_back(y);
    }

    for(int i=1;i<=n;i++)if(c[i]!=M&&!dfn[i])tarjan(i);

    for(int i=1;i<=n;i++)if(!dfn[i]){
        std::cout<<"NO\n"<<i;return;
    }

    int cnt=n;
    for(auto &[x,y]:e){
        int u=scc[x],v=scc[y];
        if(u!=v)in[v]++;
    }

    int sum=0;
    for(int i=1;i<=scc_cnt;i++){
        if(!in[i])sum+=scc_c[i];
    }
    std::cout<<"YES\n"<<sum;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t = 1;
    // std::cin>>t;
    while (t--) fc();
    return 0;
}